<?php

class PhotocatController extends AController
{
	/**
	 * @return array action filters
	 */
	public function filters()
	{
		return array(
			'accessControl', // perform access control for CRUD operations
		);
	}

	/**
	 * Specifies the access control rules.
	 * This method is used by the 'accessControl' filter.
	 * @return array access control rules
	 */
	public function accessRules()
	{
		return array(
			array('allow',  // allow all users to perform 'index' and 'view' actions
				'actions'=>array('index','view'),
				'users'=>array('*'),
			),
			array('allow', // allow authenticated user to perform 'create' and 'update' actions
				'actions'=>array('create','update'),
				'users'=>array('@'),
			),
			array('allow', // allow admin user to perform 'admin' and 'delete' actions
				'actions'=>array('admin','delete', 'editcat', 'scanimagedir', 'imageview', 'deleteimage', 'updateimage', 'position', 'gallerysetting'),
				'users'=>array('admin'),
			),
			array('deny',  // deny all users
				'users'=>array('*'),
			),
		);
	}



    /**
     * Сканирование дирректории с изображениями, и занесением
     * информации о них в БД
     */
    public function actionScanimagedir()
    {
     Yii::import('application.extensions.image.Image');    //Подключение графической библиотеки из Kohana
     $model = Photocat::model()->findByPk($_GET['id']);
     
        if(isset($_POST['imagedir']))
            {
              $filepath = Yii::getPathOfAlias('webroot').'/data/'.$_POST['imagedir'];                             //путь до дирректории с файлами  
              $directories = @scandir($filepath);
              if(!$directories)
                $errormsg = '<p style="color:red">Неправильный путь до дирректории с файлами</p>';
                    else{
                         $directories = array_slice($directories, 2);     //список файлов в дирректории
                      
                         $imagedirpath = str_replace('\\', '/', $_POST['imagedir']);                            //замена слешей, если указаны неправильно                   
                         Photocat::model()->updateByPk($_GET['id'], array('imagedirpath'=>$imagedirpath));
                         
                             //удаляем все изображения в текущем альбоме, если они существуют, кроме полей с комментариями к фото (поле name)               
                             Photo::model()->deleteAll('id_catalog = :id_catalog AND name IS NULL', array('id_catalog'=>$_GET['id']));  
                       
                         foreach($directories as $imagename)                                                     //сохраняем список изображений в БД
                            {  
                               if(is_file($filepath.'/'.$imagename)){      //проверяем, чтобы был типа файл
                                      $img = Yii::app()->image->load($filepath.'/'.$imagename);              //Загружаем текущее изображение (используя расширение image)
                                      //-----  создаём миниатюру ---------
                                      if(!is_dir($filepath.'/thumb'))           
                                         mkdir($filepath.'/thumb');             //создаём папку для миниатюр, если её не существует
                                    
                                        $width = Yii::app()->settings->get('system', 'thumbwidth');             //Ширина миниатюры, получена из нстроек
                                        $height = Yii::app()->settings->get('system', 'thumbheight');           //Высота миниатюры, получена из настроек
                                        $img->resize($width, $height)->quality(75);                                         //Создание миниатюры с заданными размерами
                                        $img->save($filepath.'/thumb/thumb_'.$imagename);                           //Сохранение миниатюры в папке thumb
                                        $thumb = Yii::app()->image->load($filepath.'/thumb/thumb_'.$imagename);     //Загружаем миниатюру (используя расширение image)
                                        
                                        //поиск изображений, уже содержащихся в БД
                                        $oldimg = Photo::model()->findByAttributes(array('big'=>$imagename, 'id_catalog'=>$_GET['id']));     
                                     
                                     if(!$oldimg)           //Если не существует такого изображения, то создаём новое
                                      {
                                      $photo = new Photo;  
                                      $photo->big = $imagename;                          //Название файла оригинального изображения
                                      $photo->small = 'thumb_'.$imagename;               //Название файла миниатюры
                                      $photo->id_catalog = $_GET['id'];                  //название текущего фотоальбома
                                      $photo->width = $thumb->width;                       //ширина миниатюры
                                      $photo->height = $thumb->height;                     //высота миниатюры
                                      $photo->save(); 
                                      }
                              } //end if
                            }   
                        
                        }   //end else
            
            }
        
        $this->render('scanimagedir', array('errormsg'=>$errormsg, 
                                            'model'=>$model,
                                            ));
    }



    public function actionImageview()
    {
        $model = Photocat::model()->findByPk($_GET['id']);
        $images = Photo::model()->findAllByAttributes(array('id_catalog'=>$model->id));
        
        	
    	$dataProvider=new CActiveDataProvider('Photo', array(
			'criteria'=>array(
				'condition'=>'id_catalog = :model_id',
                'params'=>array(':model_id'=>$model->id),
                'order'=>'position ASC',
				    ),
		              	'pagination'=>array(
			             	'pageSize'=>4,
						      	),
			)); 
        
       
        $this->render('imageview', array('model'=>$model,
                                         'dataProvider'=>$dataProvider,   
                                         'images'=>$images, 
                                         ));
    }


    public function actionUpdateimage()
    {
        $model = Photo::model()->findByPk($_GET['id']);
        if(isset($_POST['Photo']))
		  {
			$model->attributes=$_POST['Photo'];
			if($model->save())
					$this->redirect(array('imageview', 'id'=>$_POST['album']));    //$_POST['album'] передаётся скрытым полем
	       	}
        
        $this->render('updateimage', array('model'=>$model, 'cat_id'=>$_GET['cat_id']));
    }
    
    

    public function actionDeleteimage()
    {
        	if(Yii::app()->request->isPostRequest)
	       	{
	       	 Photo::model()->deleteByPk($_GET['id']);  
               
           	// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
			if(!isset($_GET['ajax']))
				$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('index'));  
            } else
			     throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');  
        
    }   


    public function actionPosition()                    //перемещение позиции 
    {  
        if(isset($_GET['position']) && $_GET['position']=='up' && isset($_GET['pos']))         //если выбрана стрелка вверх
        {
           Photo::model()->updateAll(array('position'=>0), 'position=:position', array('position'=>$_GET['pos']-1));                     //предидущему присваиваю 0
           Photo::model()->updateAll(array('position'=>$_GET['pos']-1), 'position = :position', array('position'=>$_GET['pos']));        //текущему -1
           Photo::model()->updateAll(array('position'=>$_GET['pos']), 'position = :position', array('position'=>0));        
        }
       
       if(isset($_GET['position']) && $_GET['position']=='down' && isset($_GET['pos']))         //если выбрана стрелка вниз
        {
           Photo::model()->updateAll(array('position'=>0), 'position=:position', array('position'=>$_GET['pos']+1));                      //следующему присваиваю 0
           Photo::model()->updateAll(array('position'=>$_GET['pos']+1), 'position = :position', array('position'=>$_GET['pos']));        //текущему
           Photo::model()->updateAll(array('position'=>$_GET['pos']), 'position = :position', array('position'=>0)); 
        }
        
             Yii::app()->request->redirect($_SERVER['HTTP_REFERER']);
  
    }       //end action

 //-----------------------------------------------------------------------------------------------------------   
    /**
     * Настройки фотогалереи
     */ 
    public function actionGallerysetting() 
    {
   
    if(isset($_POST) and !empty($_POST))
    {    
     Yii::app()->cache->flush();                                                      //Очищает весь кэш и админки и front 
        
         if(isset($_POST['thumbwidth']))
            Yii::app()->settings->set('system', 'thumbwidth', $_POST['thumbwidth'], $toDatabase=true); 
            
         if(isset($_POST['thumbheight']))
            Yii::app()->settings->set('system', 'thumbheight', $_POST['thumbheight'], $toDatabase=true);  
            
       
       Yii::app()->user->setFlash('success', 'Настройки успешно сохранены!');      
             Yii::app()->request->redirect('index');   
     }
     
     
     $model = Setting::model()->findAll();
     $this->render('gallerysetting', array('model'=>$model));
    }
//--------------------------------------------------------------------------------------------


	/**
	 * Creates a new model.
	 * If creation is successful, the browser will be redirected to the 'view' page.
	 */
	public function actionCreate()
	{
		$model=new Photocat;

		// Uncomment the following line if AJAX validation is needed
		// $this->performAjaxValidation($model);

		if(isset($_POST['Photocat']))
		{
			$model->attributes=$_POST['Photocat'];
			if($model->save())
				$this->redirect(array('index'));
		}

		$this->render('create',array(
			'model'=>$model,
		));
	}

	/**
	 * Updates a particular model.
	 * If update is successful, the browser will be redirected to the 'view' page.
	 * @param integer $id the ID of the model to be updated
	 */
	public function actionUpdate($id)
	{
		$model=$this->loadModel($id);

		// Uncomment the following line if AJAX validation is needed
		// $this->performAjaxValidation($model);

		if(isset($_POST['Photocat']))
		{
			$model->attributes=$_POST['Photocat'];
			if($model->save())
				$this->redirect(array('index'));
		}

		$this->render('update',array(
			'model'=>$model,
		));
	}

	/**
	 * Deletes a particular model.
	 * If deletion is successful, the browser will be redirected to the 'admin' page.
	 * @param integer $id the ID of the model to be deleted
	 */
	public function actionDelete($id)
	{
		if(Yii::app()->request->isPostRequest)
		{
			// we only allow deletion via POST request
			$this->loadModel($id)->delete();
            
          //   $allimages = Photo::model()->findAllByAttributes(array('id_catalog'=>$id));
          //  $allrecords = Photo::model()->deleteAllByAttributes(array('id_catalog'=>$id));         //Удаление всех фоток из данной категории
            
      /*      if($allrecords>0)
                {
                   
                    foreach($allimages as $item)
                        {
                           unlink(Yii::getPathOfAlias('webroot.data.photogall.big').'/'.$item->big);
                           unlink(Yii::getPathOfAlias('webroot.data.photogall.small').'/'.$item->small);  
                            
                        }
                    
                }
          */  
            

			// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
			if(!isset($_GET['ajax']))
				$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
		}
		else
			throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');
	}
    
    
  

	/**
	 * Manages all models.
	 */
	public function actionIndex()
	{ 
		$model=new Photocat('search');
		$model->unsetAttributes();  // clear any default values
		if(isset($_GET['Photocat']))
			$model->attributes=$_GET['Photocat'];

		$this->render('index',array(
			'model'=>$model,
		));
	}
    

	/**
	 * Returns the data model based on the primary key given in the GET variable.
	 * If the data model is not found, an HTTP exception will be raised.
	 * @param integer the ID of the model to be loaded
	 */
	public function loadModel($id)
	{
		$model=Photocat::model()->findByPk($id);
		if($model===null)
			throw new CHttpException(404,'The requested page does not exist.');
		return $model;
	}

	/**
	 * Performs the AJAX validation.
	 * @param CModel the model to be validated
	 */
	protected function performAjaxValidation($model)
	{
		if(isset($_POST['ajax']) && $_POST['ajax']==='photocat-form')
		{
			echo CActiveForm::validate($model);
			Yii::app()->end();
		}
	}
}
